更新时间:2024-09-26 10:48
在线评测系统(Online Judge,OJ)是一种在编程竞赛中用来评测参赛程序的在线系统,也可以用于平时练习。近年来(2016年或更早)亦出现一些针对求职面试的在线评测系统。许多OJ网站会自发组织一些竞赛。此外,OJ网站通常会设立用户排名,以用户的提交答案通过数多少或某个题目执行时间快慢为排名依据。
在线系统是指针对系统用户的可提供在线服务的一种系统,或指一个在线的评测系统。通过该系统对程序代码进行编译和执行。具体过程为使用者登陆浏览器,将自己的程序代码提交,系统后台对程序进行编译和执行,之后系统使用设置好的输入和输出来比对,査看程序的正确性,其技术理论依据是软件工程中的黑盒测试。所用的浏览器没有具体的要求,如微软公司的IE、谷歌公司的Chrome(不同浏览器会有不同的限制,这需要通过浏览器内核而定),系统可以判定的程序开发语言也是多样的。
用户通过浏览器在线提交自己的程序,考虑到系统安全因素,需要对程序代码的编译执行时间、对内存的使用占有进行一定的限制。首先,系统后台在收到用户提交的程序后,对未知的程序进行编译。编译使命令可以使用CCC,其调用方法类似于调用Shell命令。编译通过的程序接下来就要进行正确性检测,测试程序正误的方法是黑盒测试,使用根据程序而设计的测试数据即测试用例来进行输入输出比对,进而得到程序的正确性。
算法竞赛通常采取黑盒测试,事先准备好一些测试数据,然后用它们来评测选手的程序。在在线评测系统中,用户需要提交源代码至服务器,服务器会编译用户的源代码,然后执行源代码生成的可执行文件(或用解释方式执行,或直接执行脚本文件),得到其输出的结果,并与正确结果比较。
为防止攻击和恶意提交,服务器必须采取一定的安全措施,例如对用户提交的源代码实施过滤、将进程放入沙盒以进行隔离、对代码进行哈希以防止抄袭和重复提交等。
Virtual Judge是一种特殊的在线评测系统。与其他在线评测系统不同的是,Virtual Judge系统本身并没有任何测试数据,而是通过在其他在线评测系统中注册的机器人账号进行评测并抓取评测结果。因此可以在只有题目而没有测试数据的前提下创建竞赛。
在提交程序之后,在线评测系统会根据题目的评测情况,返回评测结果。只有返回“Accepted”状态,才表示题目通过,选手才会获得成绩。不同OJ评测结果略有出入,但常见的评测结果大致分为以下三类。
正在评测
程序未通过
程序通过
首次使用OJ系统进行计算化程序评测的是在2000年的新加坡国立大学,该学校把数据结构与算法的巧试运用在OJ系统中。但是该系统的使用率并不是很高,大多数的情况下还运学生将自己的作业使用FTP服务器以及电子邮件的方式提交给老师,然后老师去逐个检査学生的程序,利用该系统直接对学生程序进行评满还不是很普遍。
Va在线评测系统是由西班牙瓦雅多利大学开发的自动化线上程序评判系统,包含了超过4300个程序设计问题并且开放给所有人注册参与解题,有超过10万名用户。用户可以使用C(C89)、C++(C++98)、Pascal、Java、C++11或是Python撰写程序以解决题目中提出的问题,其中Java选项在2001年开放,C++11选项在2014年开放,Python选项在2016年开放。UVa同时也举办程序设计竞赛,在竞赛环境中用户必须在限制的时间之内解决一组题目。TopCoder,是一家专门组织计算机程序设计竞赛的公司。TopCoder 在线举行算法竞赛(SRMs)、组件设计竞赛和组件开发竞赛。算法竞赛在世界上与ACM、Google Code Jam并称为三大赛。
不同群体中不同OJ使用的频率也不同,学生中常会因为教师的要求使用公开/校内OJ,为此,许多公开OJ也提供了个性化服务,如Vijos中的“域”服务[7],OpenJudge、洛谷、Vjudge中的团队服务。在特定群体中亦有一些流行的在线评测系统,例如中国初中选手中流行的Vijos、进阶选手使用的BZOJ、中国大学生使用的计蒜客,hihocoder、美国求职者中流行的LeetCode等。